package cn.iune.erp.inventory;


import java.sql.Date;
import java.sql.SQLException;
import java.util.List;

import com.alibaba.fastjson.JSONObject;

public interface IStorageLedgerDetailDao {
	
	public void insert(StorageLedgerDetail obj);
	
	public void delete(String fID);
	
	public StorageLedgerDetail update(StorageLedgerDetail obj);

	public List<StorageLedgerDetail> getAll();
	
	public List<StorageLedgerDetail> getByMasterID(String fMasterID);
	
	public StorageLedgerDetail getByID(String fID);

	public List<StorageLedgerDetail> getByMasterID(String fMasterID,String billType);

	/////////////////////////计算存货成本使用////////////////////////////////////////////

	//更新出库成本使用。包含出库单和调拨单，但是需要排除销毁单（非存货仓）
	public List<StorageLedgerDetail> getListByItemID(String itemID, Date dateStart, Date dateEnd, String enterpriseNo);

	///////////////////////////////////////////////////////////////////////////////////

	/////////////////////////计算工单成本使用////////////////////////////////////////////
	//登记材料成本（领料单）
	//(3)遍历生产/委外发料退料单
	List<StorageLedgerDetail> getCostingLLDList(String workNo, Date dateStart, Date dateEnd, String enterpriseNo);

	//登记委外入库数量和生产入库数量
	//(3)遍历生产入库单数据，提取生产入库数量/报废/损耗数量
	List<StorageLedgerDetail> getCostingRKDList(Date dateStart, Date dateEnd, String enterpriseNo);
	//登记加工费用
	//(3)遍历委外入库、转移单数据，提取委外加工费用
	List<StorageLedgerDetail> getCostingWWDList(Date dateStart, Date dateEnd, String enterpriseNo);

	//(3)根据工单号遍历生产委外入库单数据，更新入库成本使用
	List<StorageLedgerDetail> getCostingRKDListByWorkNo(Date dateStart, Date dateEnd, String workNo,
			String enterpriseNo);

	///////////////////////////////////////////////////////////////////////////////////

	/////////////////////////统计工单工时使用////////////////////////////////////////////
	//获取转移单（统计工单工时使用）
	public List<StorageLedgerDetail> getOrderZYDByOrigin(String origin, Date dateStart, Date dateEnd, String enterpriseNo);

	JSONObject query(JSONObject data) throws SQLException;


	JSONObject create(JSONObject data);
	///////////////////////////////////////////////////////////////////////////////////

	StorageLedgerDetail getByNo(String recordNo, String serialNo, String revOpay, String enterpriseNo);

}
